/**
 * 字典键名常量
 *
 * 统一管理所有字典类型的键名,避免魔法字符串散落在代码各处
 *
 * 优势:
 * 1. 类型安全 - TypeScript 可以检查键名拼写错误
 * 2. 智能提示 - IDE 提供自动补全
 * 3. 统一维护 - 字典类型变更只需修改一处
 * 4. 便于追踪 - 可以快速找到字典的所有使用位置
 *
 * @example
 * ```typescript
 * import { SYSTEM_DICT, ATHLETE_DICT } from '@/constants/dictKeys'
 *
 * const { dicts } = useDict([
 *   SYSTEM_DICT.SEX,
 *   ATHLETE_DICT.PROJECT
 * ])
 * ```
 */

/**
 * 系统通用字典
 * 包含用户、审核等系统级字典
 */
export const SYSTEM_DICT = {
	/** 性别字典 (男/女/未知) */
	SEX: 'sys_sys_user_sex',

	/** 民族字典 (汉族/回族/...) */
	NATION: 'sys_user_nation',

	/** 审核状态字典 (待审核/已核准/已驳回) */
	AUDIT_STATUS: 'sys_audit_status'
} as const

/**
 * 运动员业务字典
 * 包含运动员相关的业务字典
 */
export const ATHLETE_DICT = {
	/** 运动员项目字典 (足球/篮球/游泳/...) */
	PROJECT: 'comp_athlete_project',

	/** 运动员等级字典 (国家一级/二级/...) */
	LEVEL: 'comp_athlete_level',

	/** 赛事级别字典 (国际赛/全国赛/省级赛/...) */
	RACE_LEVEL: 'comp_athlete_race_level',

	/** 集训形式字典 (集中训练/分散训练/...) */
	TRAIN_TYPE: 'comp_athlete_train_type'
} as const

/**
 * 组织/单位字典
 * 包含单位类型、等级等组织相关字典
 */
export const ORG_DICT = {
	/** 单位一级类型字典 (区分注册单位和在训单位) */
	FIRST_TYPE: 'comp_athlete_first_org_type',

	/** 在训单位类型字典 (体校/俱乐部/...) */
	TRAIN_TYPE: 'comp_athlete_train_org_type',

	/** 单位二级类型字典 (体校/俱乐部/...) */
	SECOND_TYPE: 'comp_athlete_second_org_type',

	/** 单位等级字典 (国家/市级/区县级/...) */
	LEVEL: 'comp_athlete_org_level'
} as const

/**
 * 所有字典键名的联合类型
 *
 * @description
 * 用于类型约束,确保只使用已定义的字典键名
 */
export type DictKey =
	| (typeof SYSTEM_DICT)[keyof typeof SYSTEM_DICT]
	| (typeof ATHLETE_DICT)[keyof typeof ATHLETE_DICT]
	| (typeof ORG_DICT)[keyof typeof ORG_DICT]

/**
 * 所有字典键名的值数组
 *
 * @description
 * 便于一次性获取所有字典类型
 */
export const ALL_DICT_KEYS: readonly DictKey[] = [
	...Object.values(SYSTEM_DICT),
	...Object.values(ATHLETE_DICT),
	...Object.values(ORG_DICT)
] as const
